/**
 * Derived from test cases at https://github.com/mongodb/specifications
 */

let data = [
    {"description": "[decq021] Normality", "input": "-1234567890123456789012345678901234"},
    {
        "description": "[decq823] values around [u]int32 edges (zeros done earlier)",
        "input": "-2147483649",
    },
    {
        "description": "[decq822] values around [u]int32 edges (zeros done earlier)",
        "input": "-2147483648",
    },
    {
        "description": "[decq821] values around [u]int32 edges (zeros done earlier)",
        "input": "-2147483647",
    },
    {
        "description": "[decq820] values around [u]int32 edges (zeros done earlier)",
        "input": "-2147483646",
    },
    {"description": "[decq152] fold-downs (more below)", "input": "-12345"},
    {"description": "[decq154] fold-downs (more below)", "input": "-1234"},
    {"description": "[decq006] derivative canonical plain strings", "input": "-750"},
    {"description": "[decq164] fold-downs (more below)", "input": "-123.45"},
    {"description": "[decq156] fold-downs (more below)", "input": "-123"},
    {"description": "[decq008] derivative canonical plain strings", "input": "-75.0"},
    {"description": "[decq158] fold-downs (more below)", "input": "-12"},
    {
        "description": "[decq122] Nmax and similar",
        "input": "-9.999999999999999999999999999999999E+6144",
    },
    {
        "description": "[decq002] (mostly derived from the Strawman 4 document and examples)",
        "input": "-7.50",
    },
    {"description": "[decq004] derivative canonical plain strings", "input": "-7.50E+3"},
    {"description": "[decq018] derivative canonical plain strings", "input": "-7.50E-7"},
    {
        "description": "[decq125] Nmax and similar",
        "input": "-1.234567890123456789012345678901234E+6144",
    },
    {
        "description": "[decq131] fold-downs (more below)",
        "input": "-1.230000000000000000000000000000000E+6144",
    },
    {"description": "[decq162] fold-downs (more below)", "input": "-1.23"},
    {
        "description": "[decq176] Nmin and below",
        "input": "-1.000000000000000000000000000000001E-6143",
    },
    {
        "description": "[decq174] Nmin and below",
        "input": "-1.000000000000000000000000000000000E-6143",
    },
    {
        "description": "[decq133] fold-downs (more below)",
        "input": "-1.000000000000000000000000000000000E+6144",
    },
    {"description": "[decq160] fold-downs (more below)", "input": "-1"},
    {"description": "[decq172] Nmin and below", "input": "-1E-6143"},
    {"description": "[decq010] derivative canonical plain strings", "input": "-0.750"},
    {"description": "[decq012] derivative canonical plain strings", "input": "-0.0750"},
    {"description": "[decq014] derivative canonical plain strings", "input": "-0.000750"},
    {"description": "[decq016] derivative canonical plain strings", "input": "-0.00000750"},
    {"description": "[decq404] zeros", "input": "0E-6176"},
    {"description": "[decq424] negative zeros", "input": "-0E-6176"},
    {"description": "[decq407] zeros", "input": "0.00"},
    {"description": "[decq427] negative zeros", "input": "-0.00"},
    {"description": "[decq409] zeros", "input": "0"},
    {"description": "[decq428] negative zeros", "input": "-0"},
    {"description": "[decq700] Selected DPD codes", "input": "0"},
    {"description": "[decq406] zeros", "input": "0.00"},
    {"description": "[decq426] negative zeros", "input": "-0.00"},
    {"description": "[decq410] zeros", "input": "0E+3"},
    {"description": "[decq431] negative zeros", "input": "-0E+3"},
    {"description": "[decq419] clamped zeros...", "input": "0E+6111"},
    {"description": "[decq432] negative zeros", "input": "-0E+6111"},
    {"description": "[decq405] zeros", "input": "0E-6176"},
    {"description": "[decq425] negative zeros", "input": "-0E-6176"},
    {"description": "[decq508] Specials", "input": "Infinity"},
    {"description": "[decq528] Specials", "input": "-Infinity"},
    {"description": "[decq541] Specials", "input": "NaN"},
    {
        "description": "[decq074] Nmin and below",
        "input": "1.000000000000000000000000000000000E-6143",
    },
    {
        "description": "[decq602] fold-down full sequence",
        "input": "1.000000000000000000000000000000000E+6144",
    },
    {
        "description": "[decq604] fold-down full sequence",
        "input": "1.00000000000000000000000000000000E+6143",
    },
    {
        "description": "[decq606] fold-down full sequence",
        "input": "1.0000000000000000000000000000000E+6142",
    },
    {
        "description": "[decq608] fold-down full sequence",
        "input": "1.000000000000000000000000000000E+6141",
    },
    {
        "description": "[decq610] fold-down full sequence",
        "input": "1.00000000000000000000000000000E+6140",
    },
    {
        "description": "[decq612] fold-down full sequence",
        "input": "1.0000000000000000000000000000E+6139",
    },
    {
        "description": "[decq614] fold-down full sequence",
        "input": "1.000000000000000000000000000E+6138",
    },
    {
        "description": "[decq616] fold-down full sequence",
        "input": "1.00000000000000000000000000E+6137",
    },
    {
        "description": "[decq618] fold-down full sequence",
        "input": "1.0000000000000000000000000E+6136",
    },
    {
        "description": "[decq620] fold-down full sequence",
        "input": "1.000000000000000000000000E+6135",
    },
    {
        "description": "[decq622] fold-down full sequence",
        "input": "1.00000000000000000000000E+6134",
    },
    {"description": "[decq624] fold-down full sequence", "input": "1.0000000000000000000000E+6133"},
    {"description": "[decq626] fold-down full sequence", "input": "1.000000000000000000000E+6132"},
    {"description": "[decq628] fold-down full sequence", "input": "1.00000000000000000000E+6131"},
    {"description": "[decq630] fold-down full sequence", "input": "1.0000000000000000000E+6130"},
    {"description": "[decq632] fold-down full sequence", "input": "1.000000000000000000E+6129"},
    {"description": "[decq634] fold-down full sequence", "input": "1.00000000000000000E+6128"},
    {"description": "[decq636] fold-down full sequence", "input": "1.0000000000000000E+6127"},
    {"description": "[decq638] fold-down full sequence", "input": "1.000000000000000E+6126"},
    {"description": "[decq640] fold-down full sequence", "input": "1.00000000000000E+6125"},
    {"description": "[decq642] fold-down full sequence", "input": "1.0000000000000E+6124"},
    {"description": "[decq644] fold-down full sequence", "input": "1.000000000000E+6123"},
    {"description": "[decq646] fold-down full sequence", "input": "1.00000000000E+6122"},
    {"description": "[decq648] fold-down full sequence", "input": "1.0000000000E+6121"},
    {"description": "[decq650] fold-down full sequence", "input": "1.000000000E+6120"},
    {"description": "[decq652] fold-down full sequence", "input": "1.00000000E+6119"},
    {"description": "[decq654] fold-down full sequence", "input": "1.0000000E+6118"},
    {"description": "[decq656] fold-down full sequence", "input": "1.000000E+6117"},
    {"description": "[decq658] fold-down full sequence", "input": "1.00000E+6116"},
    {"description": "[decq660] fold-down full sequence", "input": "1.0000E+6115"},
    {"description": "[decq662] fold-down full sequence", "input": "1.000E+6114"},
    {"description": "[decq664] fold-down full sequence", "input": "1.00E+6113"},
    {"description": "[decq666] fold-down full sequence", "input": "1.0E+6112"},
    {"description": "[decq060] fold-downs (more below)", "input": "1"},
    {"description": "[decq670] fold-down full sequence", "input": "1E+6110"},
    {"description": "[decq668] fold-down full sequence", "input": "1E+6111"},
    {"description": "[decq072] Nmin and below", "input": "1E-6143"},
    {
        "description": "[decq076] Nmin and below",
        "input": "1.000000000000000000000000000000001E-6143",
    },
    {
        "description": "[decq036] fold-downs (more below)",
        "input": "1.230000000000000000000000000000000E+6144",
    },
    {"description": "[decq062] fold-downs (more below)", "input": "1.23"},
    {
        "description": "[decq034] Nmax and similar",
        "input": "1.234567890123456789012345678901234E+6144",
    },
    {"description": "[decq441] exponent lengths", "input": "7"},
    {"description": "[decq449] exponent lengths", "input": "7E+5999"},
    {"description": "[decq447] exponent lengths", "input": "7E+999"},
    {"description": "[decq445] exponent lengths", "input": "7E+99"},
    {"description": "[decq443] exponent lengths", "input": "7E+9"},
    {"description": "[decq842] VG testcase", "input": "7.049000000000010795488000000000000E-3097"},
    {"description": "[decq841] VG testcase", "input": "8.000000000000000000E-1550"},
    {"description": "[decq840] VG testcase", "input": "8.81125000000001349436E-1548"},
    {"description": "[decq701] Selected DPD codes", "input": "9"},
    {
        "description": "[decq032] Nmax and similar",
        "input": "9.999999999999999999999999999999999E+6144",
    },
    {"description": "[decq702] Selected DPD codes", "input": "10"},
    {"description": "[decq057] fold-downs (more below)", "input": "12"},
    {"description": "[decq703] Selected DPD codes", "input": "19"},
    {"description": "[decq704] Selected DPD codes", "input": "20"},
    {"description": "[decq705] Selected DPD codes", "input": "29"},
    {"description": "[decq706] Selected DPD codes", "input": "30"},
    {"description": "[decq707] Selected DPD codes", "input": "39"},
    {"description": "[decq708] Selected DPD codes", "input": "40"},
    {"description": "[decq709] Selected DPD codes", "input": "49"},
    {"description": "[decq710] Selected DPD codes", "input": "50"},
    {"description": "[decq711] Selected DPD codes", "input": "59"},
    {"description": "[decq712] Selected DPD codes", "input": "60"},
    {"description": "[decq713] Selected DPD codes", "input": "69"},
    {"description": "[decq714] Selected DPD codes", "input": "70"},
    {"description": "[decq715] Selected DPD codes", "input": "71"},
    {"description": "[decq716] Selected DPD codes", "input": "72"},
    {"description": "[decq717] Selected DPD codes", "input": "73"},
    {"description": "[decq718] Selected DPD codes", "input": "74"},
    {"description": "[decq719] Selected DPD codes", "input": "75"},
    {"description": "[decq720] Selected DPD codes", "input": "76"},
    {"description": "[decq721] Selected DPD codes", "input": "77"},
    {"description": "[decq722] Selected DPD codes", "input": "78"},
    {"description": "[decq723] Selected DPD codes", "input": "79"},
    {"description": "[decq056] fold-downs (more below)", "input": "123"},
    {"description": "[decq064] fold-downs (more below)", "input": "123.45"},
    {"description": "[decq732] Selected DPD codes", "input": "520"},
    {"description": "[decq733] Selected DPD codes", "input": "521"},
    {"description": "[decq740] DPD: one of each of the huffman groups", "input": "777"},
    {"description": "[decq741] DPD: one of each of the huffman groups", "input": "778"},
    {"description": "[decq742] DPD: one of each of the huffman groups", "input": "787"},
    {"description": "[decq746] DPD: one of each of the huffman groups", "input": "799"},
    {"description": "[decq743] DPD: one of each of the huffman groups", "input": "877"},
    {
        "description": "[decq753] DPD all-highs cases (includes the 24 redundant codes)",
        "input": "888",
    },
    {
        "description": "[decq754] DPD all-highs cases (includes the 24 redundant codes)",
        "input": "889",
    },
    {
        "description": "[decq760] DPD all-highs cases (includes the 24 redundant codes)",
        "input": "898",
    },
    {
        "description": "[decq764] DPD all-highs cases (includes the 24 redundant codes)",
        "input": "899",
    },
    {"description": "[decq745] DPD: one of each of the huffman groups", "input": "979"},
    {
        "description": "[decq770] DPD all-highs cases (includes the 24 redundant codes)",
        "input": "988",
    },
    {
        "description": "[decq774] DPD all-highs cases (includes the 24 redundant codes)",
        "input": "989",
    },
    {"description": "[decq730] Selected DPD codes", "input": "994"},
    {"description": "[decq731] Selected DPD codes", "input": "995"},
    {"description": "[decq744] DPD: one of each of the huffman groups", "input": "997"},
    {
        "description": "[decq780] DPD all-highs cases (includes the 24 redundant codes)",
        "input": "998",
    },
    {
        "description": "[decq787] DPD all-highs cases (includes the 24 redundant codes)",
        "input": "999",
    },
    {"description": "[decq053] fold-downs (more below)", "input": "1234"},
    {"description": "[decq052] fold-downs (more below)", "input": "12345"},
    {"description": "[decq792] Miscellaneous (testers' queries, etc.)", "input": "30000"},
    {"description": "[decq793] Miscellaneous (testers' queries, etc.)", "input": "890000"},
    {
        "description": "[decq824] values around [u]int32 edges (zeros done earlier)",
        "input": "2147483646",
    },
    {
        "description": "[decq825] values around [u]int32 edges (zeros done earlier)",
        "input": "2147483647",
    },
    {
        "description": "[decq826] values around [u]int32 edges (zeros done earlier)",
        "input": "2147483648",
    },
    {
        "description": "[decq827] values around [u]int32 edges (zeros done earlier)",
        "input": "2147483649",
    },
    {
        "description": "[decq828] values around [u]int32 edges (zeros done earlier)",
        "input": "4294967294",
    },
    {
        "description": "[decq829] values around [u]int32 edges (zeros done earlier)",
        "input": "4294967295",
    },
    {
        "description": "[decq830] values around [u]int32 edges (zeros done earlier)",
        "input": "4294967296",
    },
    {
        "description": "[decq831] values around [u]int32 edges (zeros done earlier)",
        "input": "4294967297",
    },
    {"description": "[decq022] Normality", "input": "1111111111111111111111111111111111"},
    {"description": "[decq020] Normality", "input": "1234567890123456789012345678901234"},
    {"description": "[decq550] Specials", "input": "9999999999999999999999999999999999"},
];

data.forEach(function (testCase) {
    print(`Test - ${testCase.description}`);
    let output = NumberDecimal(testCase.input).toString();
    if (testCase.expected) {
        assert.eq(output, `NumberDecimal("${testCase.expected}")`);
    } else {
        assert.eq(output, `NumberDecimal("${testCase.input}")`);
    }
});
